package com.codeying.langchain4j;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.spring.AiServiceWiringMode;
import reactor.core.publisher.Flux;

@AiService(
        wiringMode = AiServiceWiringMode.EXPLICIT,//手动装配
        chatModel = "openAiChatModel",//指定模型
        streamingChatModel = "openAiStreamingChatModel",
        chatMemory = "chatMemory",//配置会话记忆对象
        chatMemoryProvider = "chatMemoryProvider",//配置会话记忆提供者对象
        contentRetriever = "contentRetriever",//配置向量数据库检索对象
        tools = "aiTool"
)
public interface MyAiService {
    //用于聊天的方法
    @SystemMessage("你是专业的AI题库提供者，可以给用户提供如下功能：\n" +
            "1.查询用户的所有题库信息\n" +
            "2.根据题目模糊查询题库信息\n" +
            "3.根据知识点模糊查询题库信息\n" +
            "4.帮用户生成题库信息(询问用户需要生成的科目以及年级)\n" +
            "5.保存题库信息\n" +
            "说明：\n" +
            "    1.如果用户每次问的问题和以上的5个记录没关系，那么提示用户你可以做什么，是否帮ta查询题库信息或者帮忙解答题目\n" +
            "    2.根据题目模糊查询题库信息，需要用户告知题目\n" +
            "    3.根据知识点模糊查询题库信息，需要用户告知知识点\n" +
            "    4.保存题库信息，需要用户表达出需要保存的确认意愿，你不能自己模拟数据帮用户保存\n" +
            "    5.如果用户需要你帮忙生成题库信息，那么你应该去寻找相关的题目信息（题目名、题目内容、题目答案、知识点）进行保存\n" +
            "\n用户ID是{{userid}}")
    //@UserMessage("xxx{{msg}}")
    Flux<String> chat(/*@V("msg")*/@MemoryId String memoryId, @UserMessage String message,@V("userid")String userid);
}
